home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 September / CHIP Eylül 1998.iso / freeware / Memct00 / memct.exe / MemCtrl.pas < prev    next >
Pascal/Delphi Source File  |  1998-03-17  |  6KB  |  244 lines

  1. unit MemCtrl;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   Grids, extctrls, dsgnintf;
  8.  
  9. type
  10.   TAboutProperty = class(TPropertyEditor)
  11.   public
  12.     procedure Edit; override;
  13.     function GetAttributes: TPropertyAttributes; override;
  14.     function GetValue: string; override;
  15.   end;
  16.  
  17. type
  18.   TMemShow = (
  19.     TotalAddrSpace, TotalUncommitted, TotalCommitted,
  20.     TotalAllocated, TotalFree, FreeSmall, FreeBig,
  21.     Unused, Overhead, HeapErrorCode
  22.   );
  23.  
  24.   TMemShows = set of TMemShow;
  25.  
  26. type
  27.   TMemCtrl = class(TGraphicControl)
  28.   private
  29.     FAbout : TAboutProperty;
  30.     FAutoSize : Boolean;
  31.     FMemCnt : Integer;
  32.     FMemStr : Array[0..10] of string[50];
  33.     FMemStr_Old : Array[0..10] of string[50];
  34.     FFont      : TFont;
  35.     FHeap  : THeapStatus;
  36.     FTimer : TTimer;
  37.     FInterval : Cardinal;
  38.     FMemShows : TMemShows;
  39.     FPolling  : Boolean;
  40.     procedure SetPolling(A : Boolean);
  41.     procedure SetInterval(A : Cardinal);
  42.     procedure SetFont(A : TFont);
  43.     procedure SetAutoSize(A : Boolean);
  44.     procedure TimerFunc(Sender: TObject);
  45.   protected
  46.     procedure Paint; override;
  47.   public
  48.     constructor create(AOwner : TComponent); override;
  49.     destructor  destroy; override;
  50.   published
  51.     property About : TAboutProperty read FAbout write FAbout;
  52.     property MemShows : TMemShows read FMemShows write FMemShows;
  53.     property Interval : Cardinal read FInterval write SetInterval;
  54.     property Polling  : Boolean  read FPolling  write SetPolling;
  55.     property Font: TFont read FFont write SetFont;
  56.     property AutoSize : Boolean read FAutoSize write SetAutoSize;
  57.   end;
  58.  
  59. procedure Register;
  60.  
  61. implementation
  62.  
  63. procedure Register;
  64. begin
  65.   RegisterComponents('Lib_Erw', [TMemCtrl]);
  66.   RegisterPropertyEditor(TypeInfo(TAboutProperty), TMemCtrl,
  67.                          'ABOUT', TAboutProperty);
  68.  
  69. end;
  70.  
  71. procedure TAboutProperty.Edit;
  72. begin
  73.   Application.MessageBox ('TMemCtrl by kbi'            + #13#10 +
  74.                           'This component is freeware.' + #13#10 +
  75.                           '⌐ 1998 kbi'                  + #13#10 +
  76.                           'mailto:nccfast@t-online.de',
  77.                           'About',
  78.                           MB_OK + MB_ICONINFORMATION);
  79. end;
  80.  
  81. function TAboutProperty.GetAttributes: TPropertyAttributes;
  82. begin
  83.   Result := [paMultiSelect, paDialog, paReadOnly];
  84. end;
  85.  
  86. function TAboutProperty.GetValue: string;
  87. begin
  88.   Result := 'About';
  89. end;
  90.  
  91.  
  92.  
  93. procedure TMemCtrl.SetInterval(A : Cardinal);
  94. begin
  95.   FInterval := A;
  96.   FTimer.Interval := A;
  97. end;
  98.  
  99. procedure TMemCtrl.SetPolling(A : Boolean);
  100. begin
  101.   FPolling := A;
  102.   FTimer.enabled := A;
  103. end;
  104.  
  105. procedure TMemCtrl.TimerFunc(Sender: TObject);
  106. var
  107.   topaint : Boolean;
  108.   k : integer;
  109. begin
  110.   topaint := false;
  111.  
  112.   FHeap := GetHeapStatus;
  113.   FTimer.enabled := false;
  114.  
  115.   FMemCnt := 0;
  116.   if TotalAddrSpace in FMemShows then
  117.   begin
  118.     FMemStr[FMemCnt] := 'TotalAddrSpace: ' + inttostr(FHeap.TotalAddrSpace);
  119.     inc(FMemCnt);
  120.   end;
  121.   if TotalUncommitted in FMemShows then
  122.   begin
  123.     FMemStr[FMemCnt] := 'TotalUncommitted: ' + inttostr(FHeap.TotalUncommitted);
  124.     inc(FMemCnt);
  125.   end;
  126.   if TotalCommitted in FMemShows then
  127.   begin
  128.     FMemStr[FMemCnt] := 'TotalCommitted: ' + inttostr(FHeap.TotalUncommitted);
  129.     inc(FMemCnt);
  130.   end;
  131.   if TotalAllocated in FMemShows then
  132.   begin
  133.     FMemStr[FMemCnt] := 'TotalAllocated: ' + inttostr(FHeap.TotalAllocated);
  134.     inc(FMemCnt);
  135.   end;
  136.   if TotalFree in FMemShows then
  137.   begin
  138.     FMemStr[FMemCnt] := 'TotalFree: ' + inttostr(FHeap.TotalFree);
  139.     inc(FMemCnt);
  140.   end;
  141.   if FreeSmall in FMemShows  then
  142.   begin
  143.     FMemStr[FMemCnt] := 'FreeSmall: ' + inttostr(FHeap.TotalFree);
  144.     inc(FMemCnt);
  145.   end;
  146.   if FreeBig in FMemShows then
  147.   begin
  148.     FMemStr[FMemCnt] := 'FreeBig: ' + inttostr(FHeap.FreeBig);
  149.     inc(FMemCnt);
  150.   end;
  151.   if Unused in FMemShows then
  152.   begin
  153.     FMemStr[FMemCnt] := 'Unused: ' + inttostr(FHeap.Unused);
  154.     inc(FMemCnt);
  155.   end;
  156.   if Overhead in FMemShows then
  157.   begin
  158.     FMemStr[FMemCnt] := 'Overhead: ' + inttostr(FHeap.Overhead);
  159.     inc(FMemCnt);
  160.   end;
  161.   if Overhead in FMemShows then
  162.   begin
  163.     FMemStr[FMemCnt] := 'HeapErrorCode: ' + inttostr(FHeap.HeapErrorCode);
  164.     inc(FMemCnt);
  165.   end;
  166.   for k := 0 to FMemCnt-1  do
  167.   begin
  168.     if FMemStr_Old[k] <> FMemStr[k] then topaint := true;
  169.     FMemStr_Old[k] := FMemStr[k];
  170.   end;
  171.  
  172.   if topaint then paint;
  173.   FTimer.enabled :=Polling;
  174. end;
  175.  
  176.  
  177. constructor TMemCtrl.create(AOwner : TComponent);
  178. begin
  179.   inherited create(AOwner);
  180.   FFont          := TFont.create;
  181.   FTimer := TTimer.Create(self);
  182.   FTimer.interval := 200;
  183.   FTimer.OnTimer := TimerFunc;
  184.   FAutoSize := true;
  185.   MemShows := [TotalAllocated];
  186.   Polling  := true;
  187.   Interval := 200;
  188. end;
  189.  
  190. destructor TMemCtrl.destroy;
  191. begin
  192.   FTimer.free;
  193.   FFont.free;
  194.   inherited;
  195. end;
  196.  
  197. procedure TMemCtrl.SetFont(A : TFont);
  198. begin
  199.   if A <> FFont then
  200.   begin
  201.     FFont.Assign(A);
  202.     Canvas.Font := FFont;
  203.     invalidate;
  204.   end;
  205. end;
  206.  
  207. procedure TMemCtrl.SetAutoSize(A : Boolean);
  208. begin
  209.   if A <> FAutoSize then
  210.   begin
  211.     FAutoSize := A;
  212.     invalidate;
  213.   end;
  214. end;
  215.  
  216. procedure TMemCtrl.Paint;
  217. var
  218.   h, w, k : integer;
  219. begin
  220.   h := 0; w := 0;
  221.   for k := 0 to FMemCnt-1  do
  222.   begin
  223.     if canvas.TextHeight(FMemStr[k]) > h then
  224.       h := canvas.TextHeight(FMemStr[k]);
  225.     if canvas.TextWidth(FMemStr[k]) > w then
  226.       w := canvas.TextWidth(FMemStr[k]);
  227.   end;
  228.   if FAutoSize then
  229.   begin
  230.     Height := FMemCnt*h+4;
  231.     Width  := w+4;
  232.   end;
  233.   canvas.pen.style := psclear;
  234.   canvas.rectangle(0,0,w+4, (FMemCnt)*h+4);
  235.   canvas.pen.style := pssolid;
  236.   for k := 0 to FMemCnt-1  do
  237.     canvas.textout(1,k*h, FMemStr[k]);
  238. end;
  239.  
  240.  
  241.  
  242.  
  243. end.
  244.